package com.agent;

import java.lang.instrument.Instrumentation;

/**
 * 利用Instrumentation API 实现热更
 */
public class Premain {

    private static Instrumentation instrumentation;
    public static Object lockObject = new Object();

    public Premain() {
    }

    /**
     * 当使用 -javaagent 参数启动 JVM 时，JVM 会自动调用这个方法
     * @param agentArgs
     * @param inst
     */
    public static void premain(String agentArgs, Instrumentation inst) {
        synchronized(lockObject) {
            if (instrumentation == null) {
                instrumentation = inst;
            }
        }
    }

    /**
     * 动态附加代理，JVM 已经运行时动态挂载代理（例如使用Virtual Machine API）。
     * @param args
     * @param inst
     */
    public static void agentmain(String args, Instrumentation inst) {
        synchronized(lockObject) {
            if (instrumentation == null) {
                instrumentation = inst;
            }
        }
    }

    public static Instrumentation getInstrumentation() {
        return instrumentation;
    }

    public static void main(String[] args) {

    }
}
